//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
//	int n;
//	cin >> n;
//	vector<int>a(n), b(n);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> a[i] >> b[i];
//	}
//
//	for (int i = 1; i <= 1e6; i++)
//	{
//		bool flag = true;
//		for (int j = 0; j < n; j++)
//		{
//			if (a[j] / i != b[j])
//			{
//				flag = false;
//			}
//
//
//
//		}
//		if (flag)
//		{
//			cout << i<<" ";
//			break;
//
//
//
//		}
//
//
//
//
//	}
//	for (int i = 1e6; i>=1; i--)
//	{
//		bool flag = true;
//		for (int j = 0; j < n; j++)
//		{
//			if (a[j] / i != b[j])
//			{
//				flag = false;
//			}
//
//
//
//		}
//		if (flag)
//		{
//			cout << i<<" ";
//			break;
//
//
//
//		}
//
//
//
//
//	}
//
//
//
//
//
//
//
//
//}
//
//
//#include<iostream>
//#include<vector>
//using namespace std;
//int n;
//
//const int N = 1e4 + 10;
//int a[N], b[N];
//bool ismin(int mid)
//{
//	for (int i = 0; i < n; i++)
//	{
//		if (b[i] < a[i] / mid)
//			return false;
//	}
//	return true;
//
//
//
//}
//bool ismax(int mid)
//{
//	for (int i = 0; i < n; i++)
//	{
//		if (b[i] > a[i] / mid)
//			return false;
//	}
//	return true;
//
//
//
//}
//int main()
//{
//
//	cin >> n;
//	
//	for (int i = 0; i < n; i++)
//	{
//		cin >> a[i] >> b[i];
//	}
//	int lmin = 1;
//	int rmin = 1e9;
//	while (lmin < rmin)
//	{ 
//		int mid = (lmin + rmin) / 2;
//		if (ismin(mid))
//		{
//			rmin = mid;
//		}
//
//		else
//		{
//			lmin = mid + 1;
//		}
//
//
//
//
//
//
//
//	}
//	
//	int lmax = 1;
//	int rmax = 1e9;
//	while (lmax< rmax)
//	{
//		int mid = (lmax + rmax+1) / 2;
//		if (ismax(mid))
//		{
//			lmax = mid;
//			
//		}
//
//		else
//		{
//			rmax = mid - 1;
//		}
//
//
//
//
//
//
//
//	}
//	cout << rmin<<" "<< lmax;
//
//	
//	
//
//
//
//
//
//
//
//
//}
#include<iostream>
using namespace std;
int n;
const int N = 1e4 + 10;
int a[N], b[N];
bool is_min(int mid)
{
	for (int i = 0; i < n; i++)
	{
		if (b[i] < a[i] / mid)
			return false;


	}
	return true;




}
bool is_max(int mid)
{

	for (int i = 0; i < n; i++)
	{
		if (b[i] > a[i] / mid)
			return false;


	}
	return true;



}
int main()
{
	
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin>>a[i] >> b[i];
	}
	int lmin = 1;
	int rmin = 1e9;
	while (lmin < rmin)
	{
		int mid = (lmin + rmin) / 2;
		if (is_min(mid))
		{
			rmin = mid;
		}
		else
		{
			lmin = mid + 1;

		}



	}
	int lmax = 1;
	int rmax = 1e9;
	while (lmax < rmax)
	{
		int mid = (lmax + rmax + 1) / 2;
		if (is_max(mid))
		{
			lmax = mid;
			
		}
		else
		{
			rmax = mid - 1;

		}






	}
	cout << rmin << " " << lmax;





}